package beans;


import java.util.List;

import javax.annotation.PostConstruct;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.RequestScoped;

import dao.ProyectoDao;
import dao.UsuarioDao;
import excepciones.DaoException;

import modelo.Proyecto;
import modelo.Usuario;

@ManagedBean 
@RequestScoped
public class EditarIntegrantesBean {

	@ManagedProperty(value="#{editProyectoBean}")
	private EditProyectoBean editProyectoBean;
	
	private List<Usuario> integrantes;
	private List<Usuario> seleccionBorrar;
	private Proyecto proyecto;
	private List <Usuario> seleccionIntegrantes;
	private List<Usuario> usuarios;
	private ProyectoDao proyectoDao;
	
	public ProyectoDao getProyectoDao() {
		return proyectoDao;
	}

	public void setProyectoDao(ProyectoDao proyectoDao) {
		this.proyectoDao = proyectoDao;
	}

	@PostConstruct
	public void init(){

		this.setProyecto(this.getEditProyectoBean().getProyecto());
		// Traigo los integrantes				
		this.setIntegrantes((List<Usuario>) this.getProyecto().getIntegrantes());					

		UsuarioDao usuarioDao = new UsuarioDao();
		try {
			this.setUsuarios(usuarioDao.getTodosLosIntegrantes());
		} catch (DaoException e) {
			e.printStackTrace();
		}		
	}

	/**
	 * Borro los usuarios seleccionadas como integrantes del proyecto
	 */
	public void borrar(){
		List<Usuario> aBorrar = this.getSeleccionBorrar();
		
		for (Usuario usuario : aBorrar) {
			this.getIntegrantes().remove(usuario);
		}		
		actualizarProyecto();
	}
	
	/**
	 *  Agrego los usuarios del listado y la guardo en el proyecto como integrantes
	 */
	public void agregar(){
		
		List<Usuario> selec = this.getSeleccionIntegrantes();
		for (Usuario usuario : selec) {
			if (!this.getIntegrantes().contains(usuario))
				this.getIntegrantes().add(usuario);
		}
		actualizarProyecto();		
	}
	/**
	 * Actualiza en la BD las modificaciones que se hicieron en el proyecto
	 */
	protected void actualizarProyecto(){
		ProyectoDao proDao = new ProyectoDao(proyecto);
		this.proyecto.setIntegrantes(getIntegrantes());
		try {
			proDao.update();
			proDao.closeEntityManager();
		} catch (DaoException e) {
			e.printStackTrace();
		}
	}

	public String volver(){
		return "irEditarProyectos";
	}
	
	public List<Usuario> getIntegrantes() {
		return integrantes;
	}

	public void setIntegrantes(List<Usuario> integrantes) {
		this.integrantes = integrantes;
	}

	public Proyecto getProyecto() {
		return proyecto;
	}

	public void setProyecto(Proyecto proyecto) {
		this.proyecto = proyecto;
	}

	public List<Usuario> getSeleccionBorrar() {
		return seleccionBorrar;
	}

	public void setSeleccionBorrar(List<Usuario> seleccionBorrar) {
		this.seleccionBorrar = seleccionBorrar;
	}

	public EditProyectoBean getEditProyectoBean() {
		return editProyectoBean;
	}

	public void setEditProyectoBean(EditProyectoBean editProyectoBean) {
		this.editProyectoBean = editProyectoBean;
	}

	public List <Usuario> getSeleccionIntegrantes() {
		return seleccionIntegrantes;
	}

	public void setSeleccionIntegrantes(List <Usuario> seleccionIntegrantes) {
		this.seleccionIntegrantes = seleccionIntegrantes;
	}

	public List<Usuario> getUsuarios() {
		return usuarios;
	}

	public void setUsuarios(List<Usuario> usuarios) {
		this.usuarios = usuarios;
	}
	
}
